package interfaz;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
/*
 * 
 * HAI QUE CREAR EN ALGUN SITIO UNHA LIBRERIA DE FUNCIONS PARA LOCALIZAR FOTOS,
 * MUSICA ETC.
 * 
 * EscenariosDefinidos.java
 *
 * Created on 1 de marzo de 2008, 20:22
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
import java.io.File;
import java.util.ArrayList;

/**
 *
 * @author victor
 */
public class EscenariosDefinidos {
    private static Canvas inv; //Para crear imaxes con obxecto Canvas
    private static int defaultBgOpacity = 85;
    
    //Definicion de constantes escenarios
    public static String PRINCIPAL = "Principal";
    public static String FOTOS = "Fotos";
    public static String ARTISTAS = "Artistas";
    public static String ALBUMES = "Albumes";
    public static String XENEROS = "Xeneros";
    public static String PLAY = "Reproducir";
    public static String QUIT = "Quit";
    public static String MUSICA = "Musica";
    public static String LISTA = "Lista Cancions";
    private static String fondo = "fondo.jpg";
    
    /** Creates a new instance of EscenariosDefinidos */
    public EscenariosDefinidos() {
    }
    
    public static boolean escenarioPrincipal(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.PRINCIPAL));
    }
    public static boolean escenarioReproducir(String str) {
        return (RutaEscenario.obtenerCategoria(str).
                equalsIgnoreCase(EscenariosDefinidos.PLAY));
    }
    public static boolean escenarioReproducirMusica(String str) {
        return ((RutaEscenario.obtenerCategoria(str).
                equalsIgnoreCase(EscenariosDefinidos.PLAY)) &&
            (RutaEscenario.obtenerTipoBusqueda(str).
                    equalsIgnoreCase(EscenariosDefinidos.MUSICA)));        
    }
    public static boolean escenarioReproducirMusicaLista(String str) {
                return ((RutaEscenario.obtenerCategoria(str).
                equalsIgnoreCase(EscenariosDefinidos.PLAY)) &&
            (RutaEscenario.obtenerTipoBusqueda(str).
                    equalsIgnoreCase(EscenariosDefinidos.LISTA)));  
    }
    public static boolean escenarioReproducirFotos(String str) {
        return ((RutaEscenario.obtenerCategoria(str).
                equalsIgnoreCase(EscenariosDefinidos.PLAY)) &&
            (RutaEscenario.obtenerTipoBusqueda(str).
                    equalsIgnoreCase(EscenariosDefinidos.FOTOS)));
    }
     public static boolean escenarioMusica(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.MUSICA));
    }
     public static boolean escenarioLista(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.LISTA));
    }
    public static boolean escenarioFotos(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.FOTOS));
    }

    public static boolean escenarioArtistas(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.ARTISTAS));
    }

    public static boolean escenarioAlbumes(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.ALBUMES));
    }

    public static boolean escenarioXeneros(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.XENEROS));
    }
    
    public static boolean escenarioQuit(String str) {
        return (RutaEscenario.obtenerUltimoNivel(str).
                equalsIgnoreCase(EscenariosDefinidos.QUIT));
    }
    
    
    private static String[] obtenerFotosEnCarpeta (String path) {
        /* REUBICAR CANTO ANTES NA LIBRERIA QUE LLE CORRESPONDA */
        
        File[] actual = new File(path).listFiles();
        ArrayList lista = new ArrayList();

        for (int i = 0; i < actual.length; i++) {
            if (actual[i].isFile() && actual[i].getName().endsWith(".jpg")) {
                lista.add(actual[i].getAbsolutePath());
            }
            if (actual[i].isFile() && actual[i].getName().endsWith(".JPG")) {
                lista.add(actual[i].getAbsolutePath());
            }
        }
        
        String[] fotos = new String[lista.size()];
        for (int i = 0; i < fotos.length; i++) {
            fotos[i] = (String) lista.get(i);
        }
        return fotos;
    }
    
    public static void setCanvas(Canvas in) {
        inv = in;
    }
    
    public static Escenario Principal() {
        Escenario escenario;
        
        String[] eltos = new String[2];
        eltos[0] = MUSICA;
        eltos[1] = FOTOS;
        String[] fotos = new String[2];
        fotos[0] = "iTunes.png";
        fotos[1] = "NSApplicationIcon.png";
        
        escenario = ListaIconos(fotos,eltos,true);
        /* Utilizamos o constructor ListaIconos, true pq son carpetas */
        escenario.setPrevEsc(QUIT); /* Escape debe sair */
            /* Se en escenario.nextCol non ponhemos nada, a seguinte escenario
             * vira dada en funcion do item seleccionado. Interesa */
        
        return escenario;
    }
    
    public static Escenario Musica() {
        Escenario escenario;
        String[] items = new String[4];
        
        items[0] = ARTISTAS;
        items[1] = ALBUMES;
        items[2] = XENEROS;
        items[3] = LISTA;
        
        escenario = Lista(items,true);
        
        escenario.setPrevEsc(PRINCIPAL);
        escenario.setId(MUSICA);
        escenario.setTitle(MUSICA);
        
        //Agregamos un icono
        iPicture picture = new iPicture(100,220);
        picture.setImage("iTunes.png");
        picture.setBorder(0);
        picture.setCanvas(inv);
        picture.setWidth(300);
        picture.setHeight(300);
        escenario.addItem(picture);
        
        return escenario;
    }
    
    public static Escenario Lista(String[] lista,boolean carpetas) {
            /*Escenario a partir dunha lista dada. Admite funcion de carpetas,
             *global para cada elemento.*/
        boolean[] array = new boolean[lista.length];
        
        for (int i=0;i < array.length;i++)
            array[i] = carpetas;
        
        return Lista(lista,array);
    }
    
    public static Escenario Lista(String[] lista,boolean[] carpetas) {
        /*Escenario a partir dunha lista dada. Admite funcion de carpetas,
         *independente para cada elemento.*/
        Escenario escenario = new Escenario();     
        escenario.setBackground(fondo);
        escenario.setBgOpacity(defaultBgOpacity);
        
        iTextMenu text;
        int menuItem;
        
        /* Plantilla de escenario a partir dunha lista dada */
        text = new iTextMenu(600,320);
        text.setFont(new Font("Verdana",0,72));
        text.setWidth(300);
        text.setHeight(600);
        text.setActiveColor(Color.WHITE);
        text.setUnActiveColor(Color.GRAY);
        for (int i=0;i < lista.length;i++) {
            text.addItem(lista[i],carpetas[i]);
        }
        
        menuItem = escenario.addItem(text);
        escenario.addListening(menuItem);
        escenario.setMenuItem(menuItem);
        
        return escenario;
    }
    
    public static Escenario ListaIconos(String[] fotos, String[] titulos,
            boolean carpetas) {
        return ListaIconos(fotos,titulos,carpetas,0);
    }
    
    public static Escenario ListaIconos(String[] fotos, String[] titulos,
            boolean carpetas,int border) {
     /* Escenario a partir dunha lista de fotos e elementos. Admite funcion
      *de carpetas, independente para cada elemento */
        boolean[] array = new boolean[fotos.length];
        
        for (int i=0;i < array.length;i++)
            array[i] = carpetas;
        
        return ListaIconos(fotos,titulos,array,border);
    }
    
    
    public static Escenario ListaIconos(String[] fotos, String[] titulos,
            boolean[] carpetas) {
        return ListaIconos(fotos,titulos,carpetas,0);
    }
    
    public static Escenario ListaIconos(String[] fotos, String[] titulos,
            boolean[] carpetas,int border) {
        /* Escenario a partir dunha lista de fotos e elementos. Admite funcion
         *de carpetas, independente para cada elemento */
        Escenario coleccion = new Escenario();    
        coleccion.setBackground(fondo);
        coleccion.setBgOpacity(defaultBgOpacity);
        int menuItem;
        
        iPictureMenu picture = new iPictureMenu(50,40);
        picture.setBorder(border);
        picture.setW(300);
        picture.setH(300);
        picture.setW1(225);
        picture.setH1(225);
        picture.setW2(150);
        picture.setH2(150);
        for (int i=0;i < fotos.length;i++)
            picture.addPicture(fotos[i]);
        picture.setActiveItem(0);
        picture.setCanvas(inv);
        picture.setHorizontal(false);
        picture.setWidth(400);
        picture.setHeight(750);
        
        coleccion.addListening(coleccion.addItem(picture)); //agregamos item y
        //lo ponemos a escuchar
        
        
        iTextMenu text = new iTextMenu(600,250);
        
        text.setFont(new Font("Verdana",0,72));
        text.setActiveColor(Color.WHITE);
        text.setUnActiveColor(Color.GRAY);
        for (int i=0;i < titulos.length;i++)
            text.addItem(titulos[i],carpetas[i]);
        text.setWidth(300);
        text.setHeight(600);
        
        menuItem = coleccion.addItem(text);
        coleccion.addListening(menuItem);
        coleccion.setMenuItem(menuItem);
        
        return coleccion;
    }
    
    public static Escenario ReproducirFoto(String foto) {
        Escenario coleccion = new Escenario();    
        coleccion.setBackground(fondo);
        coleccion.setBgOpacity(defaultBgOpacity);
        /* Cargamos as fotos que hai na carpeta contedora da que queremos 
         * mostrar para poder presentar o carrusel */
        String[] fotos = obtenerFotosEnCarpeta((new File(foto)).getParent());
        
        /* Creamos o menu oculto coa ruta do item para poder acceder con cada
         * seleccion */
        iTextMenu menu = new iTextMenu(0, 0);
        menu.setWidth(0);
        menu.setFont(new Font("Verdana", 0, 0));
        
        /* Creamos carrusel e actualizamos items do menu */
        iPictureMenu pictureMenu = new iPictureMenu(50,40);
        pictureMenu.setBorder(1);
        pictureMenu.setW(200);
        pictureMenu.setH(200);
        pictureMenu.setW1(150);
        pictureMenu.setH1(150);
        pictureMenu.setW2(100);
        pictureMenu.setH2(100);
        for (int i=0;i < fotos.length;i++) {
            pictureMenu.addPicture(fotos[i]);
            menu.addItem(fotos[i],false);
        }
        pictureMenu.setActiveItem(0);
        pictureMenu.setCanvas(inv);
        pictureMenu.setHorizontal(false);
        pictureMenu.setWidth(400);
        pictureMenu.setHeight(750);
        coleccion.addListening(coleccion.addItem(pictureMenu));
        
        int menuItem = coleccion.addItem(menu);
        coleccion.addListening(menuItem);
        coleccion.setMenuItem(menuItem);
        
        iPicture picture = new iPicture(300,50);
        picture.setImage(foto);
        picture.setAdjustedSize(Escenario.getWidth(),Escenario.getHeight());
        picture.setBorder(1);
        
        coleccion.setMainPicture(coleccion.addItem(picture));
        
        return coleccion;
    }
    
    public static Escenario ReproduccionMusica(String artista,
            String album, String titulo, String caratula) {
        /*Menu de reproduccion*/
        Escenario escenario = new Escenario();
        escenario.setBackground(fondo);
        escenario.setBgOpacity(defaultBgOpacity);
        
        /*escenario.setTitle(PLAY); */ /*non nos vale o titulo por defecto,
                                        por non estar centrado */
        
        //Agregamos un icono
        iPicture picture = new iPicture(80,220);
        picture.setImage(caratula);
        picture.setBorder(0);
        picture.setCanvas(inv);
        picture.setWidth(300);
        picture.setHeight(300);
        escenario.addItem(picture);
        
        iText title = new iText(300,90);
        title.setFont(new Font("Verdana",0,86));
        title.setMaxChars(30);
        title.setWidth(300);
        title.setHeight(120);
        title.setColor(Color.WHITE);
        title.setText(PLAY);
        escenario.addItem(title);
        
        iLine line = new iLine(0,120);
        line.setWidth(2000);
        line.setHeight(5);
        escenario.addItem(line);
        
        iText iartista = new iText(420,265);
        iartista.setFont(new Font("Verdana",0,74));
        iartista.setMaxChars(30);
        iartista.setWidth(300);
        iartista.setHeight(120);
        iartista.setColor(Color.WHITE);
        iartista.setText(artista);
        escenario.addItem(iartista);
        
        iText ialbum = new iText(420,340);
        ialbum.setFont(new Font("Verdana",0,64));
        ialbum.setMaxChars(30);
        ialbum.setWidth(300);
        ialbum.setHeight(120);
        ialbum.setColor(Color.LIGHT_GRAY);
        ialbum.setText(album);
        escenario.addItem(ialbum);
        
        iText icancion = new iText(420,415);
        icancion.setFont(new Font("Verdana",0,64));
        icancion.setMaxChars(30);
        icancion.setWidth(300);
        icancion.setHeight(120);
        icancion.setColor(Color.GRAY);
        icancion.setText(titulo);
        escenario.addItem(icancion);
        
        iProgress progressBar = new iProgress (50,580);
        progressBar.setBlock(true);
        progressBar.setWidth(1180);
        progressBar.setHeight(60);
        progressBar.setStatus(0);
        escenario.setProgressBar(escenario.addItem(progressBar));
        
        return escenario;
    }
    
    public static Escenario Cargando() {
        Escenario escenario = new Escenario();    
        escenario.setBackground(fondo);
        escenario.setBgOpacity(defaultBgOpacity);
        
        iText carga = new iText(300,300);
        carga.setColor(Color.WHITE);
        carga.setFont(new Font("Verdana",0,106));
        carga.setText("Cargando...");
        escenario.addItem(carga);
        return escenario;
    }
}
